class CelebracionesController < ApplicationController
  before_filter :login_required
  before_filter :find_celebraciones_no_usadas, :only => [:new, :edit]
  
  # Listado de mis celebraciones dadas de alta.
  def index
    @celebraciones = current_usuario.celebraciones
  end
  
  # Acción que permite añadir una celebracion nueva. Si tengo
  # todos los Tipos de Celebracion agregadas, volveré atrás.
  def new
    respond_to do |format|
      if @celebraciones.empty?
        format.html { 
          flash[:alert] = "Tienes todas las fechas importantes ya apuntadas."
          redirect_to usuario_celebraciones_path(current_usuario.login)
        }
      else
        format.html
      end      
    end    
  end
  
  # Acción que me permite editar una celebración ya dada de alta.
  def edit
    @celebracion = Celebracion.find(params[:id])
    @celebraciones << TipoCelebracion.find(@celebracion.tipo_celebracion)
  end
     
  # Método que añade a la BD una nueva celebración.
  def create
    @celebracion = Celebracion.new(params[:celebracion])

    respond_to do |format|
      if @celebracion.save
        format.html { 
          current_usuario.celebraciones << @celebracion
          flash[:notice] = "Fecha importante añadida con éxito."
          redirect_to usuario_celebraciones_path(current_usuario.login)
        }
      else
        format.html {
          find_celebraciones_no_usadas
          render :action => 'new'
        }
      end
    end    
  end
  
  # Método que edita una celebreación.
  def update
    @celebracion = Celebracion.find(params[:id])
    tipo_celebracion = @celebracion.tipo_celebracion
    
    respond_to do |format|
      if @celebracion.update_attributes(params[:celebracion])
        format.html {
          flash[:notice] = "Fecha importante actualizada con éxito."
          redirect_to usuario_celebraciones_path(current_usuario.login)
        }
      else
        format.html {
          find_celebraciones_no_usadas << TipoCelebracion.find(tipo_celebracion.id)
          render :action => 'edit'
        }
      end
    end
  end
  
  protected
   
  # Encuentra las celebraciones que aún no ha definido el usuario
  def find_celebraciones_no_usadas
    @celebraciones = TipoCelebracion.find(:all)
    celebraciones_existentes = current_usuario.celebraciones.collect { |c| c.tipo_celebracion_id }
    @celebraciones.delete_if {|c| celebraciones_existentes.include? c.id }
  end
end